package com.qiguliuxing.dts.admin.service;

import static com.qiguliuxing.dts.admin.util.AdminResponseCode.GOODS_NAME_EXIST;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.qiguliuxing.dts.admin.dao.DocAll;
import com.qiguliuxing.dts.db.domain.*;
import com.qiguliuxing.dts.db.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.qiguliuxing.dts.admin.util.AdminResponseUtil;
import com.qiguliuxing.dts.admin.util.AuthSupport;
import com.qiguliuxing.dts.admin.util.CatVo;
import com.qiguliuxing.dts.core.qcode.QCodeService;
import com.qiguliuxing.dts.core.util.ResponseUtil;

import javax.print.Doc;

@Service
public class AdminDocService {
    private static final Logger logger = LoggerFactory.getLogger(AdminGoodsService.class);

    @Autowired
    private GmDocModService docModService;

    @Autowired
    private GmDocService docService;



    public Object list(String docNumber, String docName,Integer page, Integer limit,String sort, String order) {
//        try {
        logger.info("【请求结束】文件管理->文件列表->查询,结果:{}", limit);
            List<GmDoc> docList = docService.querySelective(docNumber,docName,page,limit,sort,order);

            long total = PageInfo.of(docList).getTotal();
            Map<String, Object> data = new HashMap<>();
            data.put("total", total);
            data.put("items", docList);
            logger.info("【请求结束】文件管理->文件列表->查询,响应结果:{}", JSONObject.toJSONString(data));
            return ResponseUtil.ok(data);
//        }catch (Exception e){
//            logger.error(e.getMessage());
//            return ResponseUtil.fail();
//        }
    }

    private Object validate(DocAll docAll) {
        GmDoc doc = docAll.getDoc();
        String name = doc.getDocName();
        if (StringUtils.isEmpty(name)) {
            return ResponseUtil.badArgument();
        }
        Integer docType = doc.getDocType();
        if (StringUtils.isEmpty(docType)) {
            return ResponseUtil.badArgument();
        }
        // 品牌商可以不设置，如果设置则需要验证品牌商存在
        String docLink = doc.getDocLink();
        if (docLink != null && docLink != "") {
            if (docService.findById(doc.getId()) == null) {
                return ResponseUtil.badArgumentValue();
            }
        }

        GmDocMod[] mods = docAll.getDocMod();
        /*for (GmDocMod mod : mods) {
            Integer id = mod.getId();
            if (id != null && id != 0) {
                if (docModService.findById(mod.getId()) == null) {
                    return ResponseUtil.badArgumentValue();
                }
            }
            String content = mod.getContent();
            if (StringUtils.isEmpty(content)) {
                return ResponseUtil.badArgument();
            }
            String docName = mod.getDocName();
            if (StringUtils.isEmpty(docName)) {
                return ResponseUtil.badArgument();
            }

        }*/




        return null;
    }

    /**s
     * 编辑商品
     * <p>
     * TODO 目前商品修改的逻辑是 1. 更新Dts_goods表 2.
     * 逻辑删除Dts_goods_specification、Dts_goods_attribute、Dts_goods_product 3.
     * 添加Dts_goods_specification、Dts_goods_attribute、Dts_goods_product
     * <p>
     * 这里商品三个表的数据采用删除再添加的策略是因为 商品编辑页面，支持管理员添加删除商品规格、添加删除商品属性，因此这里仅仅更新是不可能的，
     * 只能删除三个表旧的数据，然后添加新的数据。 但是这里又会引入新的问题，就是存在订单商品货品ID指向了失效的商品货品表。
     * 因此这里会拒绝管理员编辑商品，如果订单或购物车中存在商品。 所以这里可能需要重新设计。
     */
    @Transactional
    public Object update(DocAll docAll) {
        Object error = validate(docAll);
        if (error != null) {
            return error;
        }
        GmDoc doc = docAll.getDoc();
        /*GmDocMod[] docMods = docAll.getDocMod();*/


        Integer id = doc.getId();
        // 检查是否存在购物车商品或者订单商品
        // 如果存在则拒绝修改商品。
      /*  if (orderGoodsService.checkExist(id) || cartService.checkExist(id)) {
            logger.error("商品管理->商品管理->编辑错误:{}", GOODS_UPDATE_NOT_ALLOWED.desc());
            return AdminResponseUtil.fail(GOODS_UPDATE_NOT_ALLOWED);
        }*/

        // 将生成的分享图片地址写入数据库
/*        String url = qCodeService.createGoodShareImage(null,goods.getId().toString(), goods.getPicUrl(), goods.getName(),goods.getCounterPrice(),goods.getRetailPrice());
        goods.setShareUrl(url);*/
/*
        // 商品基本信息表Dts_goods
       // /* if (docService.updateById(doc) == 0) {
            // logger.error("商品管理->商品管理->编辑错误:{}", "更新数据失败");
            throw new RuntimeException("更新数据失败");
        }*/
        if (docService.updateById(doc) == 0) {
             logger.error("商品管理->商品管理->编辑错误:{}", "更新数据失败");
            throw new RuntimeException("更新数据失败");
        }
        /*Integer gid = doc.getId();
        docModService.deleteById(gid);*/
    /*    attributeService.deleteByGid(gid);
        productService.deleteByGid(gid);*/

    /*    // 商品规格表Dts_goods_specification
        for (DtsGoodsSpecification specification : specifications) {
            specification.setGoodsId(goods.getId());
            specificationService.add(specification);
        }

        // 商品参数表Dts_goods_attribute
        for (DtsGoodsAttribute attribute : attributes) {
            attribute.setGoodsId(goods.getId());
            attributeService.add(attribute);
        }

        // 商品货品表Dts_product
        for (DtsGoodsProduct product : products) {
            product.setGoodsId(goods.getId());
            productService.add(product);
        }*/
        //qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName());

        logger.info("【请求结束】文件->文件管理->编辑,响应结果:{}", "成功!");
        return ResponseUtil.ok();
    }



    @Transactional
    public Object delete(GmDoc doc) {
        Integer id = doc.getId();
        if (id == null) {
            return ResponseUtil.badArgument();
        }

        Integer gid = doc.getId();
        docService.deleteById(gid);
        docModService.deleteById(gid);

        logger.info("【请求结束】文件管理->文件管理->删除,响应结果:{}", "成功!");
        return ResponseUtil.ok();
    }

    @Transactional
    public Object create(DocAll docAll) {
       /* Object error = validate(docAll);
        if (error != null) {
            return error;
        }*/

        GmDoc doc = docAll.getDoc();
        doc.setIseffective(true);
        doc.setDeleted(false);
         /*GmDocMod[] mods = docAll.getDocMod();*/
   /*     DtsGoodsSpecification[] specifications = goodsAllinone.getSpecifications();
        DtsGoodsProduct[] products = goodsAllinone.getProducts();*/

        String name = doc.getDocName();
    /*    if (docService.checkExistByName(name)) {
            logger.error("文件管理->文件列表->上架错误:{}", GOODS_NAME_EXIST.desc());
            return AdminResponseUtil.fail(GOODS_NAME_EXIST);
        }*/
        docService.add(doc);

        // 文件修改信息表Mod
       /* docService.add(doc);
        for (GmDocMod mod : mods) {
            mod.setId(mod.getId());
            *//*docModService.add(mod);*//*
        }*/


        // 将生成的分享图片地址写入数据库
       /* String url = qCodeService.createGoodShareImage(null,goods.getId().toString(), goods.getPicUrl(), goods.getName(),goods.getCounterPrice(),goods.getRetailPrice());
        if (!StringUtils.isEmpty(url)) {
            goods.setShareUrl(url);
            if (docService.updateById(goods) == 0) {
                logger.error("商品管理->商品管理->上架错误:{}", "更新数据失败");
                throw new RuntimeException("更新数据失败");
            }
        }*/

        // 商品规格表Dts_goods_specification
     /*   for (DtsGoodsSpecification specification : specifications) {
            specification.setGoodsId(goods.getId());
            specificationService.add(specification);
        }

        // 商品参数表Dts_goods_attribute
        for (DtsGoodsAttribute attribute : attributes) {
            attribute.setGoodsId(goods.getId());
            attributeService.add(attribute);
        }*/

   /*     // 商品货品表Dts_product
        for (DtsGoodsProduct product : products) {
            product.setGoodsId(goods.getId());
            productService.add(product);
        }*/

        logger.info("【请求结束】文件管理->文件管理->上架,响应结果:{}", "成功!");
        return ResponseUtil.ok();
    }


    public Object detail(Integer id) {
        GmDoc doc = docService.findById(id);

        List<GmDocMod> mods = docModService.queryByDid(id);
     /*   List<DtsGoodsSpecification> specifications = specificationService.queryByGid(id);
        List<DtsGoodsAttribute> attributes = attributeService.queryByGid(id);*/

        //用于展示商品归属的类目（页面级联下拉控件数据展示）
    /*    Integer categoryId = goods.getCategoryId();
        DtsCategory category = categoryService.findById(categoryId);*/
     /*   Integer[] categoryIds = new Integer[] {};
        if (category != null) {
            Integer parentCategoryId = category.getPid();
            categoryIds = new Integer[] { parentCategoryId, categoryId };
        }*/

        Map<String, Object> data = new HashMap<>();
        data.put("doc", doc);
        data.put("mods", mods);
 /*       data.put("products", products);
        data.put("attributes", attributes);
        data.put("categoryIds", categoryIds);*/

        logger.info("【请求结束】文件管理->文件管理->详情,响应结果:{}", "成功!");
        return ResponseUtil.ok(data);
    }

}
